阅读更多

11顶
0踩

非技术
再厉害的人也会遇到瓶颈,只有不断地提高自己和持之以恒才能突破。 jQuery的创始人和技术领袖,John Resig,在业余编程项目的瓶颈时期究竟采取了什么策略?来应对自己的危机? 无论你是否是程序猿,你都可以从中受益。

 

去年秋天我的业余编程项目(coding side projects)到了一个紧要关头:没有充足的进度,也不能够找到一种方法在既不牺牲我可汗学院(Khan Academy)高效的工作的前提下完成更多的事情。

如何处理我的业余编程项目是有一些严重问题的。我最主要是在周末或者某些工作日的晚上编写代码。如同结果一样,这种策略并不适合我。周末我拖着巨大的压力尝试完成尽可能多的高质量代码(如果我没能完成我会认为自己很失败)。这样想有一个问题,因为没有什么能够保证我每个周末都有空,并且想整个周末都写程序而不是抓紧机会放松或娱乐。

每周写代码之间空挡太长也是个问题。你很容易忘记在做什么、什么还没做完(即使做记录也于事无补)。更不用说如果你错过一个周末,你就会面对长达两周的间隔。大量两周或者更多周的思维转换可是致命的(我的很多业余项目都由于精力不足而终止)。

我被Jennifer Dewalt去年完成的工作震惊了,她在180天内构建了180个网站以学习编程。受到她的启发,我强迫自己尝试一个相似的策略:每一天都要进行我的业余项目。

我决定给自己制定一些规则:

  1. 我必须每天都写代码。我可以写文档,博客或其他的东西。但必须依附于我所写的代码。
  2. 代码必须是有用的。不能代码微调,不能代码重排,且尽量不要重构。(这些事情都是允许的,但不作为当天特有的工作。)
  3. 所有代码必须在午夜前写。
  4. 代码必须开源且放在Github上。

其中的一些规则有点武断。虽然从技术上来讲代码没必要非得在午夜前写,但我想要避免熬夜太久写糟糕的代码。而且代码没必要开源放在Github上。这只是强迫我写代码时多上点心(想想重用以及决定开发过程早点写模块)。

到目前为止我进行得很顺利,我已进行了20周的连续工作。我想要写下这些是因为这方法完全改变了我的编码方式并且对我的生活以及心智都有实质性的影响。

有这些规则后,习惯的改变导致了很多有趣的事情发生:

最少可行代码(Minimum viable code).每天我被强迫写至少30分钟的代码。(少量时间内很难写出有意义的代码,尤其是在记起前一天写到哪里后)有一些工作日我写得多点,但通常少于1小时。而周末,我有时候能一整天当程序猿。

编码即为习惯(Code as habit).其实重要的一点是我并不特别在意Github上的(负面)聊天内容是如何被他人理解的。我认为这是从这个实验中我学到的最重要的东西:这是关于在你一生中为了你自己而进行的改变而非为了让你的工作能讨好他人而进行的改变。这也适用于任何形式的节食或锻炼:如果你不在意提高自己,你是永远也不会成功的。

抵抗焦虑(Battling anxiety).在开始这个实验之前我经常担心不能够完成足够多的工作量或者取得足够的进展(这两点很难度量,因为我的业余项目没有明确的截止日期)。我发现想要取得进展与实际取得进展是同样的重要。这让我豁然开朗。一旦我开始每天取得持续的进展,焦虑就开始消失了。我对我不断完成的工作量感到欣慰,并且我不再过度疯狂地期望完成更多的工作。

周末(Weekends).在周末完成的任务曾今对于推进进度是绝对重要的。的确有地表性地,这是我完成业余项目显著代码量的唯一时间。但现在并非如此,不过非常好。在周末完成我一整周所期望的有价值的内容只能以让我以失望告终。我极少能够完成我想要完成的所有工作,而这强迫我放弃其他周末我喜欢的活动(例如,吃中式点心,参观博物馆,去公园以及和我的小伙伴在一起玩等)以完成更多的工作。虽然我非常相信业余项目真的很重要,但总之,他们不应该阻碍你的平时生活。

发呆(Background processing).每天都写业余项目的一个有趣的副作用就是当前业余项目的任务会频繁地在你大脑中浮现。这导致当我走路,洗澡或则进行其他不耗费脑力的活动时,我总是在想接下来我要写些什么代码并且寻找好的方法来解决问题(译者注:别人看来就是发呆)。这在我每周或隔一周写一次代码的时候从未出现过。相反这些时间花费在了思考其他的一些任务上,通常是懊恼自己上周没能完成业余项目的工作量。

思维转换(Context switch). 继续业余项目时总是会有思维转换代价的。不幸的是,当一整周都在干其他任务的工作时,这转变是及其困难的。就每天都写代码而言是非常有利的,因为工作间歇时间更短。这使得回忆起正在做什么更容易。

工作权衡(Work balance). 这个改变最重要的一方面是直接学会了如何更好地权衡工作/生活/业余项目。由于明确了我每天都会工作在业余项目上,我必须更好地平衡我的时间。如果我计划晚上外出并且会很晚才回来,那么我会在一天中早些时候,既在开始我的可汗学院的主要工作前,完成我的业余项目的工作量。而且如果我没有完成我的任务,并且在外待得很晚,我会赶回家完成他而不遗漏一天。我应该注意到了我拥有更少地时间可花费在爱好上(例如版画),但这是我需要面对的合理的折衷。

他人看法(Outward perception). 把这个新的习惯告诉别人让我更受益。我的小伙伴理解我需要每天完成这个工作,因此有的时候活动安排也很迁就我的工作。能够说“没问题,我们可以出去玩/看电影/等,但我等会儿要当会儿程序猿”并且能够被理解和考虑在内是相当欣慰的。

能写多少代码?我简直不敢相信我上个月写了多少代码。我制作了一堆新的网站,重写一些框架,并且创建了大量新的节点模块(node modules)。我写了如此的多,以至于我有时候都忘记了我到底干了些什么,前一周的工作都好像是很遥远的记忆样。我对我所完成的工作量是及其满意的。

我认为这个习惯改变是一个很大的成功并且希望能尽可能地继续下去。与此同时,我将倾尽所有将这个策略推荐给其他希望让其业余项目有实质进展的人。无论这个技术对于你是有用或者没用,请告诉我。我会非常乐意听更多的趣事的!

 

来自: 译言网
11
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • jQuery之父:每天都写点代码

    jQuery之父:每天都写点代码 2014/05/29 · 职场 · 1 评论 · John Resig, 编程 分享到: 26 本文由 伯乐在线 - 伯乐在线读者 翻译。未经许可,禁止转载! 英文出处:John Resig。欢迎...

  • jQuery之父:每天要坚持写代码!

    去年秋天我的支线代码项目遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法。 我主要在周末进行我的支线,当然有时候也在晚上进行。这个方法对我而言效果不佳。我的压力太重了,我需要在周末...

  • jQuery 之父:每天写代码

    去年秋天我的支线代码项目 遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下)。我主要在周末进行我的支线,当然有时候也在晚上进行。这个方法对...

  • jQuery之父:每天写代码

    每天必须写代码。我可以写文档、写博客或者写其他东西,但是这些不能代替写代码。 代码必须是实际起作用的。调整缩进、重新排版不算。如果有可能,重构也不算。(可以进行这些事情,但这些不能是一天唯一的编码。)...

  • jQuery之父:坚持每天都要写代码

    关于作者:John Resig, jQuery之父,同时也是Pro Javascript Techniques和Secrets of the JavaScript Ninja的作者。他目前主持 Khan Academy 的开发工作。 去年秋天我的支线代码项目遇到了一些问题,项目进展...

  • jQuery 之父:坚持每天写代码

    去年秋天我的支线代码项目遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下)。 我主要在周末进行我的支线,当然有时候也在晚上进行。这个方法...

  • 天然气汽车供气系统减压装置毕业设计(cad+设计方案).zip

    天然气汽车供气系统减压装置毕业设计(cad+设计方案)

  • PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

    PHP+SQL考勤系统安全性实现(源代码+论文+答辩PPT+指导书)

  • NumPy 的用途是什么

    NumPy 的用途是什么

  • 毕业设计 基于javaweb的在线答题平台

    毕业设计 基于javaweb的在线答题平台

  • 基于MATLAB的pca人脸识别.zip

    基于MATLAB的pca人脸识别.zip

  • 课设毕设基于SSM的信息类课程教学知识管理系统LW+源码可运行.zip

    课设毕设基于SSM的系统源码可运行

  • JAVAWML信息查询与后端信息发布系统实现-WML信息查询设计(源代码+LW).zip

    JAVAWML信息查询与后端信息发布系统实现——WML信息查询设计(源代码+LW)

  • 毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

    毕业设计[整站程序]情感家园站 v3.0 For 个人版_qgweb30fp.zip

  • 熊猫脚本助手V1.8.zip

    可以自动刷课,执行重复的脚本工作,内有详细操作教程。支持WIN7---WIN10系统。

  • Java项目之实验室计算机故障报修系统(源码)

    Java项目之实验室计算机故障报修系统(源码) 开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9

  • 使用hapi框架搭建 基于协同过滤的美食推荐系统——后台.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

  • JAVAWEB校园二手平台项目.zip

    JAVAWEB校园二手平台项目,基本功能包括:个人信息、商品管理;交易商品板块管理等。本系统结构如下: (1)本月推荐交易板块: 电脑及配件:实现对该类商品的查询、用户留言功能 通讯器材:实现对该类商品的查询、用户留言功能 视听设备:实现对该类商品的查询、用户留言功能 书籍报刊:实现对该类商品的查询、用户留言功能 生活服务:实现对该类商品的查询、用户留言功能 房屋信息:实现对该类商品的查询、用户留言功能 交通工具:实现对该类商品的查询、用户留言功能 其他商品:实现对该类商品的查询、用户留言功能 (2)载入个人用户: 用户登陆 用户注册 (3)个人平台: 信息管理:实现对商品的删除、修改、查询功能 添加二手信息:实现对新商品的添加 修改个人资料:实现对用户个人信息的修改 注销

  • 基于协同过滤和SVD算法的音乐推荐系统.zip

    协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。

Global site tag (gtag.js) - Google Analytics